package com.hr.leetcode.字符串;

/**
 * 字符串模式匹配之BF算法
 * @author zhz
 * @date 2020/09/16
 **/
public class 字符串模式匹配之BF算法 {
    public static void main(String[] args) {
        String destStr ="asdfdjfkd";
        String subStr="dfdj";
        System.out.println(字符串模式匹配之BF算法.bfSearch(destStr, subStr));
    }

    /**
     * 实现BF算法
     * @param destStr 主串
     * @param subStr  子串
     * @return 返回模式串的第一个字符在主串中的索引位置，如果主串中不存在该模式串，则返回-1
     */
    public static int bfSearch(String destStr,String subStr){
        //1、定义一个指针，用于指向主串中的第一个字符
        int x=0;
        //2、定义一个指针，用于指向模式串（子串）中的第一个字符
        int y=0;
        //3‘定义一个循环，用于实现字符串的匹配操作
        while (x<destStr.length()&&y<subStr.length()){
            //4、如果相等，则继续逐个比较后续字符
            if (destStr.charAt(x)==subStr.charAt(y)){
                x++;
                y++;
            }else{//5、如果不相等，则从主串的狭隘一个字符起，重新与模式串的第一个字符串进行比较
                x=x-y+1;
                y=0;
            }
        }
        //6、如果模式串遍历完毕，则证明匹配成功，否则就证明匹配失败
        if (y==subStr.length()){
            return x-y;
        }else{
            return -1;
        }
    }
}
